﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Runtime.Serialization;
using System.Text;
using System.Transactions;
using BS_Gimnasio.General;
using DS_Gimnasio;

namespace BS_Gimnasio.Publicidad
{

    [DataContract()]

    public class cls_Foros : cls_Base
    {
        #region Variables

        public int _idForo;
        public string _nombreForo;
        public DateTime _fechaCreacion;
        public int _numeroRespuestas;
        public int _idUsuario;
        public int _idEstado;
        public DataTable _valorConsulta;

        #endregion

        #region Propiedasdes

        [DataMember()]
        public int idForo
        {
            get { return _idForo; }
            set { _idForo = value; }
        }

        [DataMember()]
        public string nombreForo
        {
            get { return _nombreForo; }
            set { _nombreForo = value; }
        }

        [DataMember()]
        public DateTime fechaCreacion
        {
            get { return _fechaCreacion; }
            set { _fechaCreacion = value; }
        }
        [DataMember()]
        public int numeroRespuestas
        {
            get { return _numeroRespuestas; }
            set { _numeroRespuestas = value; }
        }
        [DataMember()]
        public int idUsuario
        {
            get { return _idUsuario; }
            set { _idUsuario = value; }
        }

        [DataMember()]
        public int idEstado
        {
            get { return _idEstado; }
            set { _idEstado = value; }
        }

        [DataMember()]
        public DataTable valorConsulta
        {
            get { return _valorConsulta; }
            set { _valorConsulta = value; }
        
        }

        #endregion

        #region Metodos Heredados

        //Metodo Generico para insertar o actualizar
        public override void InsertarActualizarRegistro(bool tipoOperacion, ref string mensajeError)
        {
            if (tipoOperacion)
            {
                InsertarRegistro(ref mensajeError);
            }

            else
            {
                //ActualizarRegistro(ref mensajeError);
            }
        }

        //Metodo Generico para eliminar Registros
        public override bool EliminarRegistro(ref string mensajeError)
        {
            throw new NotImplementedException();
        }

        //Metodo Generico Para Listar, este metodo devuelve un DataTable
        public override DataTable Listar(int opcion)
        {

            try
            {
                DataTable dt = new DataTable();

                using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
                {
                    if (opcion == 1)
                    {
                        ISingleResult<SP_Consulta_ForosResult> Resultado = db.SP_Consulta_Foros();
                        dt = cls_Adaptador.ToDataTable(Resultado.ToList());
                       
                    }

                }

                return dt;
            }
            catch (SqlException ex)
            {
                NumeroError = ex.ErrorCode;
                MensajeError = ex.Message;

                return null;
            }

            catch (Exception e)
            {
                MensajeError = e.Message;

                return null;
            }

            
        }

        // Este metodo trae un objeto tipo La clase cls_base importante paara el uso de de los demas metodo genericos
        public override cls_Base TraerObjeto()
        {
            throw new NotImplementedException();
        }

        //MetodoGenerico para metodos personalizados de cada modulo
        public override void OtrosProcesos(int opcion, ref object resultado)
        {

            switch (opcion)
            {
                case 1:
                    
                    //resultado = this.ListaForos();
                    break;

                default:
                    break;
            }


        }

        #endregion

        #region Metodos Propios

        //Metodo para guardar en registro el Nombre del foro
        //Una vez creado el foro se lo podran asociara preguntas a este
        private void InsertarRegistro(ref string mensajeError)
        {


            try
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
                    {
                        db.SP_Insertar_Foro(nombreForo, fechaCreacion, idUsuario, idEstado);
                        transaction.Complete();
                    }
                }
            }

            catch (SqlException ex)
            {
                NumeroError = ex.ErrorCode;
                MensajeError = ex.Message;
            }

            catch (Exception e)
            {
                MensajeError = e.Message;
            }
        }

        //Metodo para obtener el listado de todo los foros activos
        //Este llena el DataGridview principal
        //public DataTable ListaForos()
        //{

        //    try
        //    {
        //        DataTable dt = new DataTable();
                
        //        DataColumn dc = new DataColumn();
                

        //        using (dtacls_GimnasioDataContext db = new dtacls_GimnasioDataContext())
        //        {
        //            ISingleResult<SP_Consulta_ForosResult> resultado = db.SP_Consulta_Foros();
        //            dt = cls_Adaptador.ToDataTable(resultado.ToList());
        //            //ISingleResult<SP_Obtiene_Numero_FacturaResult> resultado = db.SP_Obtiene_Numero_Factura(IdUsuarioInicioSeccion);

        //            //dt = cls_Adaptador.ToDataTable(resultado.ToList());

                    
        //            return dt;
        //        }
        //    }

        //    catch (SqlException ex)
        //    {
        //        NumeroError = ex.ErrorCode;
        //        MensajeError = ex.Message;
        //        DataTable dtnull = new DataTable();

        //        return dtnull;
        //    }

        //    catch (Exception e)
        //    {
        //        DataTable dtnull = new DataTable();
        //        MensajeError = e.Message;

        //        return dtnull;
        //    }
        //}


        #endregion
    }
}




